home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / util / gnu / groff_src.lha / Groff-1.07 / acgroff.m4 next >
M4 Source File  |  1993-02-21  |  9KB  |  358 lines

  1. dnl Autoconf macros for groff.
  2. dnl Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
  3. dnl 
  4. dnl This file is part of groff.
  5. dnl 
  6. dnl groff is free software; you can redistribute it and/or modify it under
  7. dnl the terms of the GNU General Public License as published by the Free
  8. dnl Software Foundation; either version 2, or (at your option) any later
  9. dnl version.
  10. dnl 
  11. dnl groff is distributed in the hope that it will be useful, but WITHOUT ANY
  12. dnl WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13. dnl FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14. dnl for more details.
  15. dnl 
  16. dnl You should have received a copy of the GNU General Public License along
  17. dnl with groff; see the file COPYING.  If not, write to the Free Software
  18. dnl Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  19. dnl
  20. define(GROFF_EXIT,[rm -f conftest* core; exit 1])dnl
  21. define(GROFF_PREFIX,[AC_PROVIDE([$0])AC_PREFIX(grops)AC_PREFIX(gcc)])dnl
  22. define(GROFF_PROG_CCC,
  23. [AC_PROVIDE([$0])cc_compile='$CCC conftest.cc -o conftest $CCLIBS $LIBS >/dev/null 2>&1'
  24. AC_SUBST(CCLIBS)
  25. if test -z "$CCC"; then
  26. # See whether the C compiler is also a C++ compiler.
  27. echo checking if C compiler is also a C++ compiler
  28. cat <<EOF > conftest.cc
  29. #ifdef __cplusplus
  30.   yes
  31. #endif
  32. EOF
  33. $CC -E conftest.cc >conftest.out 2>&1
  34. if egrep yes conftest.out >/dev/null 2>&1; then
  35.   CCC="$CC"
  36. fi
  37. fi
  38. AC_PROGRAM_CHECK(CCC,g++,g++,)
  39. AC_PROGRAM_CHECK(CCC,CC,CC,)
  40. AC_PROGRAM_CHECK(CCC,cc++,cc++,)
  41. if test -z "$CCC"; then
  42. cat <<EOM
  43. This package requires a C++ compiler, but I couldn't find one.
  44. Set the environment variable CCC to the name of your C++ compiler.
  45. EOM
  46. GROFF_EXIT
  47. fi
  48. echo checking that C++ compiler can compile very simple C++ program
  49. GROFF_CC_TEST_PROGRAM([
  50. extern "C" { void exit(int); }
  51. int main() { exit(0); }
  52. ],,
  53. cat <<EOM
  54. $CCC was unable successfully to compile a very simple C++ program
  55. (the C++ program was in a file with a suffix of .cc)
  56. EOM
  57. GROFF_EXIT
  58. ,)
  59. echo checking that C++ static constructors and destructors are called
  60. GROFF_CC_TEST_PROGRAM([
  61. extern "C" {
  62.   void exit(int);
  63.   void _exit(int);
  64. }
  65. int i;
  66. struct A {
  67.   char dummy;
  68.   A() { i = 1; }
  69.   ~A() { if (i == 1) _exit(0); }
  70. };
  71. A a;
  72. main() { exit(1); }
  73. ],,
  74. cat <<EOM
  75. $CCC is not installed correctly: static constructors and destructors do not work
  76. EOM
  77. GROFF_EXIT
  78. ,)
  79. GROFF_CC_COMPILE_CHECK([C++ header files],[#include <stdio.h>],
  80. [fopen(0, 0);],,
  81. [cat <<\EOF
  82. Your header files do not appear to support C++.
  83. I was unable to compile and link a simple C++ program that used a function
  84. declared in <stdio.h>.
  85. If you're using gcc/g++, you should install libg++.
  86. EOF
  87. GROFF_EXIT])
  88. if test "$CCC" = gcc; then CCC="gcc -O"; fi
  89. if test "$CCC" = "g++"; then CCC="g++ -O"; fi])dnl
  90. define(GROFF_CC_COMPILE_CHECK,
  91. [AC_PROVIDE([$0])AC_REQUIRE([GROFF_PROG_CCC])echo checking for $1
  92. cat <<EOF >conftest.cc
  93. $2
  94. extern "C" { void exit(int); }
  95. int main() { exit(0); } void t() { $3 }
  96. EOF
  97. dnl Don't try to run the program, which would prevent cross-configuring.
  98. if eval $cc_compile; then
  99.   ifelse([$4], , :, [$4])
  100. ifelse([$5], , , [else
  101.   $5
  102. ])dnl
  103. fi
  104. rm -f conftest*])dnl
  105. dnl
  106. define(GROFF_CC_TEST_PROGRAM,
  107. [AC_PROVIDE([$0])AC_REQUIRE([GROFF_PROG_CCC])ifelse([$4], , ,
  108. [AC_REQUIRE([AC_CROSS_CHECK])if $cross_compiling
  109. then
  110.   $4
  111. else
  112. ])dnl
  113. cat <<EOF > conftest.cc
  114. [$1]
  115. EOF
  116. rm -f conftest
  117. eval $cc_compile
  118. if test -s conftest && (./conftest) 2>/dev/null; then
  119.   ifelse([$2], , :, [$2])
  120. ifelse([$3], , , [else
  121.   $3
  122. ])dnl
  123. fi
  124. ifelse([$4], , , fi
  125. )dnl
  126. rm -f conftest*])dnl
  127. dnl
  128. define(GROFF_PAGE,
  129. [AC_REQUIRE([GROFF_PREFIX])
  130. if test -z "$PAGE" && test -r $prefix/lib/groff/font/devps/DESC
  131. then
  132.     if grep "^paperlength 841890" \
  133.         $prefix/lib/groff/font/devps/DESC >/dev/null 2>&1
  134.     then
  135.         PAGE=A4
  136.     else
  137.         PAGE=letter
  138.     fi
  139. fi
  140. if test -z "$PAGE"
  141. then
  142.     dom=`awk '([$]1 == "dom" || [$]1 == "search") { print [$]2; exit}' \
  143.         /etc/resolv.conf 2>/dev/null`
  144.  
  145.     if test -z "$dom"
  146.     then
  147.         dom=`(domainname) 2>/dev/null | tr -d '+'`
  148.         if test -z "$dom"
  149.         then
  150.             dom=`(hostname) 2>/dev/null | grep '\.'`
  151.         fi
  152.     fi
  153.  
  154. changequote(,)dnl
  155.     # If the top-level domain is two letters and it's not `us' or `ca'
  156.     # then they probably use A4 paper.
  157.     case "$dom" in
  158.     *.[Uu][Ss]|*.[Cc][Aa]) ;;
  159.     *.[A-Za-z][A-Za-z]) PAGE=A4 ;;
  160.     esac
  161. changequote([,])dnl
  162. fi
  163. test -n "$PAGE" || PAGE=letter
  164. echo guessing $PAGE size paper
  165. AC_SUBST(PAGE)])dnl
  166. dnl
  167. define(GROFF_PERL_PATH,
  168. [echo checking for perl
  169. PERLPATH=
  170. saveifs="$IFS"; IFS="${IFS}:"
  171. for dir in $PATH; do
  172.   test -z "$dir" && dir=.
  173.   if test -f $dir/perl; then
  174.      PERLPATH="$dir/perl"
  175.      break
  176.   fi
  177. done
  178. IFS="$saveifs"
  179. AC_SUBST(PERLPATH)])dnl
  180. dnl
  181. define(GROFF_WCOREFLAG,
  182. [echo checking for w_coredump
  183. AC_TEST_PROGRAM([
  184. #include <sys/types.h>
  185. #include <sys/wait.h>
  186. main()
  187. {
  188. #ifdef WCOREFLAG
  189.   exit(1);
  190. #else
  191.   int i = 0;
  192.   ((union wait *)&i)->w_coredump = 1;
  193.   exit(i != 0200);
  194. #endif
  195. }
  196. ],AC_DEFINE(WCOREFLAG,0200),,)])dnl
  197. dnl
  198. define(GROFF_MMAP,
  199. [AC_COMPILE_CHECK([mmap],[#include <sys/types.h>
  200. #include <sys/mman.h>],
  201. [char *p = mmap(0, 0, PROT_READ, MAP_PRIVATE, 0, 0); munmap(p, 0);],
  202. AC_DEFINE(HAVE_MMAP))])dnl
  203. dnl;
  204. define(GROFF_SYS_SIGLIST,
  205. [AC_COMPILE_CHECK([sys_siglist],,changequote(,)dnl
  206. [extern char *sys_siglist[]; sys_siglist[0] = 0;],changequote([,])dnl
  207. AC_DEFINE(HAVE_SYS_SIGLIST))])dnl
  208. dnl
  209. define(GROFF_STRUCT_EXCEPTION,
  210. [AC_COMPILE_CHECK([struct exception],[#include <math.h>],
  211. [struct exception e;],
  212. AC_DEFINE(HAVE_STRUCT_EXCEPTION))])dnl
  213. define(GROFF_COOKIE_BUG,
  214. [echo checking for gcc/g++ delete bug
  215. GROFF_CC_TEST_PROGRAM([
  216. #include <stdlib.h>
  217. #include <stddef.h>
  218.  
  219. int testit = 0;
  220.  
  221. int main()
  222. {
  223.   testit = 1;
  224.   int *p = new int;
  225.   delete p;
  226.   testit = 0;
  227.   exit(1);
  228. }
  229.  
  230. static unsigned dummy[3];
  231.  
  232. void *operator new(size_t n)
  233. {
  234.   if (testit) {
  235.     dummy[1] = -(unsigned)(dummy + 2);
  236.     return dummy + 2;
  237.   }
  238.   else
  239.     return (void *)malloc(n);
  240. }
  241.  
  242. void operator delete(void *p)
  243. {
  244.   if (testit) {
  245.     if (p == dummy)
  246.       exit(0);
  247.   }
  248.   else
  249.     free(p);
  250. }
  251. ],AC_DEFINE(COOKIE_BUG),,)])dnl
  252. dnl
  253. define(GROFF_CFRONT_ANSI_BUG,
  254. [AC_REQUIRE([GROFF_LIMITS_H])echo checking for cfront ANSI C INT_MIN bug
  255. GROFF_CC_TEST_PROGRAM([#include <stdlib.h>
  256. #ifdef HAVE_CC_LIMITS_H
  257. #include <limits.h>
  258. #else
  259. #define INT_MAX 2147483647
  260. #endif
  261.  
  262. #undef INT_MIN
  263. #define INT_MIN (-INT_MAX-1)
  264.  
  265. int main()
  266. {
  267.   int z = 0;
  268.   exit(INT_MIN < z);
  269. }
  270. ],AC_DEFINE(CFRONT_ANSI_BUG),,)])dnl
  271. dnl
  272. define(GROFF_ARRAY_DELETE,
  273. [GROFF_CC_COMPILE_CHECK(new array delete syntax,,
  274. changequote(,)dnl
  275. [char *p = new char[5]; delete [] p;]
  276. changequote([,]),,AC_DEFINE(ARRAY_DELETE_NEEDS_SIZE))])dnl
  277. dnl
  278. define(GROFF_BROKEN_SPOOLER_FLAGS,
  279. [test -n "${BROKEN_SPOOLER_FLAGS}" || BROKEN_SPOOLER_FLAGS=7
  280. echo using default value of ${BROKEN_SPOOLER_FLAGS} for grops -b option
  281. AC_SUBST(BROKEN_SPOOLER_FLAGS)])dnl
  282. dnl
  283. define(GROFF_PRINT,
  284. [if test -z "$PSPRINT"
  285. then
  286.     AC_PROGRAMS_CHECK(LPR,lpr)
  287.     AC_PROGRAMS_CHECK(LP,lp)
  288.     if test -n "$LPR" && test -n "$LP"
  289.     then
  290.         # HP-UX provides an lpr command that emulates lpr using lp,
  291.         # but it doesn't have lpq; in this case we want to use lp
  292.         # rather than lpr.
  293.         AC_PROGRAMS_CHECK(LPQ,lpq)
  294.         test -n "$LPQ" || LPR=
  295.     fi
  296.     if test -n "$LPR"
  297.     then
  298.         PSPRINT="$LPR"
  299.     elif test -n "$LP"
  300.     then
  301.         PSPRINT="$LP"
  302.     fi
  303. fi
  304. AC_SUBST(PSPRINT)
  305. # Figure out DVIPRINT from PSPRINT.
  306. if test -n "$PSPRINT" && test -z "$DVIPRINT"
  307. then
  308.     if test "X$PSPRINT" = "Xlpr"
  309.     then
  310.         DVIPRINT="lpr -d"
  311.     else
  312.         DVIPRINT="$PSPRINT"
  313.     fi
  314. fi
  315. AC_SUBST(DVIPRINT)])dnl
  316. define(GROFF_GETOPT,
  317. [GROFF_CC_COMPILE_CHECK([declaration of getopt in stdlib.h],
  318. [#include <stdlib.h>],
  319. [int opt = getopt(0, 0, 0); optarg = "foo"; optind = 1;],
  320. AC_DEFINE(STDLIB_H_DECLARES_GETOPT))
  321. GROFF_CC_COMPILE_CHECK([declaration of getopt in unistd.h],
  322. [#include <sys/types.h>
  323. #include <unistd.h>],
  324. [int opt = getopt(0, 0, 0); optarg = "foo"; optind = 1;],
  325. AC_DEFINE(UNISTD_H_DECLARES_GETOPT))
  326. ])dnl
  327. define(GROFF_PUTENV,
  328. [GROFF_CC_COMPILE_CHECK([declaration of putenv],[#include <stdlib.h>],
  329. [putenv((char *)0);],
  330. AC_DEFINE(STDLIB_H_DECLARES_PUTENV))])dnl
  331. define(GROFF_ETAGSCCFLAG,
  332. [echo checking for etags C++ option
  333. for flag in p C
  334. do
  335.     test -z "$ETAGSCCFLAG" || break
  336.     >conftest.c
  337.     (etags -$flag -o /dev/null conftest.c >/dev/null 2>&1) 2>/dev/null &&
  338.         ETAGSCCFLAG="-$flag"
  339.     rm -f conftest.c
  340. done
  341. AC_SUBST(ETAGSCCFLAG)])dnl
  342. define(GROFF_LIMITS_H,
  343. [AC_PROVIDE([$0])GROFF_CC_COMPILE_CHECK(['C++ <limits.h>'],
  344. [#include <limits.h>],
  345. [int x = INT_MIN; int y = INT_MAX; int z = UCHAR_MAX;],
  346. AC_DEFINE(HAVE_CC_LIMITS_H))])dnl
  347. define(GROFF_TRADITIONAL_CPP,
  348. [GROFF_CC_COMPILE_CHECK([traditional preprocessor],
  349. [#define name2(a,b) a/**/b],[int name2(foo,bar);],
  350. AC_DEFINE(TRADITIONAL_CPP))])dnl
  351. define(GROFF_TIME_T,
  352. [GROFF_CC_COMPILE_CHECK([time_t],[#include <time.h>],
  353. [time_t t = time(0); struct tm *p = localtime(&t);],,
  354. AC_DEFINE(LONG_FOR_TIME_T))])dnl
  355. define(GROFF_UNISTD_H,
  356. [GROFF_CC_COMPILE_CHECK(['C++ <unistd.h>'],[#include <unistd.h>],
  357. [read(0, 0, 0);],AC_DEFINE(HAVE_CC_UNISTD_H))])dnl
  358.